import axios from 'axios'
import { Message } from 'element-ui'
import reuter from '../router'
// 请求拦截器
axios.interceptors.request.use(
  (config) => {
    // 从sessionStorage获取 tokenStr
    const tokenStr = window.sessionStorage.getItem('tokenStr')
    // 判断是否存在  存在 每次的请求都携带 token
    if (tokenStr) {
      config.headers['Authorization'] = tokenStr
    }
    return config
  },
  (error) => {
    console.log(error)
  }
)
// 响应拦截器
axios.interceptors.response.use(
  // 请求走这里说明请求发出去了
  (success) => {
    // 业务逻辑错误  请求是否发送成功 成功就判断状态码是否存在 并且是 200
    if (success.status && success.status == 200) {
      // 请求发出去了 判断后端响应的状态码
      if (
        success.data.code == 500 ||
        success.data.code == 401 ||
        success.data.code == 403
      ) {
        // 把后台的错误消息打印出来
        Message.error({ message: success.data.message })
        return
      }
      // 如果响应的code没有上面的 说明成功了 就判断有没有响应的消息 打印出来就ok了 同意响应的消息弹框
      if (success.data.message) {
        Message.success({ message: success.data.message })
      }
    }
    // 把数据返回出去
    return success.data
  },
  // 请求走这里说明请求没有发出去
  (error) => {
    if (error.response.code == 504 || error.response.code == 404) {
      Message.error({ message: '服务器正在打吃鸡，最后一人了！' })
    } else if (error.response.code == 403) {
      Message.error({ message: '你没有充钱，没有权限，请你充钱了在来' })
    } else if (error.response.code == 401) {
      Message.error({ message: '请你先登录在访问！' })
      // 跳转到登录页  到了就不可以返回到上一个页面
      reuter.replace('/')
    }
    // 如果没有什么的code 那就把响应的异常消息打印出来
    if (error.response.data.message) {
      Message.error({ message: error.response.data.message })
    } else {
      Message.error({ message: '你是人人才，老子也不知道什么错误！' })
    }
    return
  }
)
let base = ''
// 传送json格式的post请求
export const postRequest = (url, params) => {
  return axios({
    method: 'post',
    url: `${base}${url}`,
    data: params,
  })
}
// get请求
export const getRequest = (url, params) => {
  return axios({
    method: 'get',
    url: `${base}${url}`,
    data: params,
  })
}
// put 请求
export const putRequest = (url, params) => {
  return axios({
    method: 'put',
    url: `${base}${url}`,
    data: params,
  })
}
// delete请求
export const deleteRequest = (url, params) => {
  return axios({
    method: 'delete',
    url: `${base}${url}`,
    data: params,
  })
}
